package com.blb.demo;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 变量原子性测试
 */
public class AtomicDemo {

    //成员变量有线程安全问题
    static long num = 0;

    //原子整数对象
    static AtomicInteger num2 = new AtomicInteger(0);

    public static void main(String[] args) throws InterruptedException {
        for (int i = 0; i < 10000; i++) {
            //启动多个线程，对变量进行自增操作
            new Thread(() -> {
//            变量++ 有三个步骤组成：
//            1. 读取变量的值  a 3  b 3
//            2. 计算值加1后的结果 a 4 b 4
//            3. 将结果写回变量 4
                num++;
                //使用原子整数的自增方法
                num2.incrementAndGet();
            }).start();
        }
        Thread.sleep(1000);
        System.out.println("num=" + num);
        System.out.println("num2=" + num2.get());
    }
}
